package gui;

import java.util.HashMap;
import java.util.LinkedList;

/*essa classe sera criada desde quando pegarmos todas as classes do projeto
 *  e so serve para armazenar instancias de todas as classes do projeto que serah testado.
*/
public class HashMapClassesESuasInstancias 
{
	private HashMap<String, Object> classesESuasInstancias;
	private LinkedList<ClasseEMetodos> classesEMetodosDoProjeto;
	public HashMapClassesESuasInstancias(LinkedList<ClasseEMetodos> classesEMetodosDoProjeto)
	{
		this.classesEMetodosDoProjeto = classesEMetodosDoProjeto;
		classesESuasInstancias = new HashMap<String, Object>();
		
		for(int i = 0; i < classesEMetodosDoProjeto.size(); i++)
		{
			ClasseEMetodos umaClasseEMetodo = classesEMetodosDoProjeto.get(i);
			Class umaClasse = umaClasseEMetodo.getClasse();
			String nomeDaClasse = umaClasse.getName();
			System.out.println("tentando colocar no hashmap a classe:" + nomeDaClasse);
			try 
			{
				Object instanciaDaClasse = umaClasse.newInstance();
				
				this.classesESuasInstancias.put(nomeDaClasse, instanciaDaClasse);
			} 
			catch (InstantiationException e) 
			{
			} 
			catch (IllegalAccessException e) 
			{
				// TODO Auto-generated catch block
			}
		}
	}
	
	
	public void colocarInstanciaDaClasseNoHashMap(String nomeDaClasse, Object instanciaDaClasse)
	{
		this.classesESuasInstancias.put(nomeDaClasse, instanciaDaClasse);
	}
	
	public Object pegarInstanciaDaClasseNoHashMap(String nomeDaClasse)
	{
		return this.classesESuasInstancias.get(nomeDaClasse);
	}
	
	/*reinicia o hashmap visto que as classes do proejto e suas instancias ja estao definidas*/
	public void reiniciarHashMap()
	{
		this.classesESuasInstancias.clear();
		
		for(int i = 0; i < classesEMetodosDoProjeto.size(); i++)
		{
			ClasseEMetodos umaClasseEMetodo = classesEMetodosDoProjeto.get(i);
			Class umaClasse = umaClasseEMetodo.getClasse();
			String nomeDaClasse = umaClasse.getName();
			System.out.println("tentando colocar no hashmap a classe:" + nomeDaClasse);
			try 
			{
				Object instanciaDaClasse = umaClasse.newInstance();
				
				this.classesESuasInstancias.put(nomeDaClasse, instanciaDaClasse);
			} 
			catch (InstantiationException e) 
			{
			} 
			catch (IllegalAccessException e) 
			{
				// TODO Auto-generated catch block
			}
		}
	}
	

}
